package fr.thelem.gestiondemandesthelem.web.adminactions;

import java.util.Collection;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;

import org.springframework.security.core.Authentication;
import org.springframework.security.core.context.SecurityContextHolder;

import fr.thelem.gestiondemandesthelem.dao.model.AdministrateurEntity;
import fr.thelem.gestiondemandesthelem.dao.model.PersonneEntity;
import fr.thelem.gestiondemandesthelem.dao.model.UtilisateurEntity;
import fr.thelem.gestiondemandesthelem.service.IAppliService;
import fr.thelem.gestiondemandesthelem.web.actions.BaseAction;

public class GestionUtilisateursAction extends BaseAction {

    /** Attribut serialVersionUID */
    private static final long serialVersionUID = 1L;
    private IAppliService appliService;

    private String loginLDAP;
    private String nomuser;


	private Map<String, String> res = new HashMap<String, String>();

    /**
     * Accesseur de appliService
     * 
     * @return le appliService
     */
    public IAppliService getAppliService() {
        return appliService;
    }

    /**
     * Affectation de appliService
     * 
     * @param appliService appliService à affecter
     */
    public void setAppliService(IAppliService appliService) {
        this.appliService = appliService;
    }

    /**
     * Accesseur de loginLDAP
     * 
     * @return le loginLDAP
     */
    public String getLoginLDAP() {
        return loginLDAP;
    }

    /**
     * Affectation de loginLDAP
     * 
     * @param loginLDAP loginLDAP à affecter
     */
    public void setLoginLDAP(String loginLDAP) {
        this.loginLDAP = loginLDAP;
    }

    public String getNomuser() {
		return nomuser;
	}

	public void setNomuser(String nomuser) {
		this.nomuser = nomuser;
	}

	/**
     * Accesseur de res
     * 
     * @return le res
     */
    public Map<String, String> getRes() {
        return res;
    }

    /**
     * Affectation de res
     * 
     * @param res res à affecter
     */
    public void setRes(Map<String, String> res) {
        this.res = res;
    }

    public String recherchePersonneForm() throws Exception {
    	List<PersonneEntity> personnes = (List<PersonneEntity>)appliService.rechercherPersonne(nomuser);
    	PersonneEntity lapersonne = personnes.get(0);

    	this.loginLDAP = lapersonne.getLdapPersonne();
    	//recupererAdministrateur();
    	//recupererUtilisateur();
    	AdministrateurEntity admin = appliService.recupererAdministrateur(lapersonne.getLdapPersonne());
    	UtilisateurEntity util = appliService.recupererUtilisateur(lapersonne.getLdapPersonne());
        return SUCCESS;
    }
    
    public String recupererAdministrateur() throws Exception {
        AdministrateurEntity admin = appliService.recupererAdministrateur(loginLDAP);
        res.put("2", String.valueOf(admin.getDateCreationPersonne()));
        res.put("3", String.valueOf(admin.getDateMiseAJourPersonne()));
        res.put("1", admin.getLdapPersonne());
        return SUCCESS;
    }

    public String recupererUtilisateur() throws Exception {
        UtilisateurEntity util = appliService.recupererUtilisateur(loginLDAP);
        res.put("2", String.valueOf(util.getDateCreationPersonne()));
        res.put("3", String.valueOf(util.getDateMiseAJourPersonne()));
        res.put("1", util.getLdapPersonne());
        return SUCCESS;
    }

    public String rendreAdmin() throws Exception {
        UtilisateurEntity util = appliService.recupererUtilisateur(loginLDAP);
        appliService.enleverUtilisateur(loginLDAP);
        appliService.ajouterAdministrateur(loginLDAP, util.getDateCreationPersonne(), util.getDateMiseAJourPersonne());
        return SUCCESS;
    }

    public String rendreUtilisateur() throws Exception {
        AdministrateurEntity admin = appliService.recupererAdministrateur(loginLDAP);
        appliService.enleverAdmin(loginLDAP);
        appliService.ajouterUtilisateur(loginLDAP, admin.getDateCreationPersonne(), admin.getDateMiseAJourPersonne());
        return SUCCESS;
    }

    public String execute() throws Exception {
        this.ajouterRoleSession();
        Authentication auth = SecurityContextHolder.getContext().getAuthentication();
        String name = auth.getName();
        Collection<AdministrateurEntity> admins = new HashSet<AdministrateurEntity>();
        Collection<UtilisateurEntity> utils = appliService.recupererUtilisateurs();
        for (AdministrateurEntity ad : appliService.recupererAdministrateurs()) {
            if (!ad.getLdapPersonne().equalsIgnoreCase(name)) {
                admins.add(ad);
            }
        }
        this.ajouterValeurSession("administrateurs", admins);
        this.ajouterValeurSession("utilisateurs", utils);
        return SUCCESS;
    }
}
